package global

import (
	"config-client-v1/utils/tools"
	"flag"
	"fmt"
	"gopkg.in/ini.v1"
	"os"
)

var AppConfig *ini.File

var StaticPath string
var ClientAppPath string
var ConsoleOutput bool
var ConsoleSave bool
var ConsoleOutputLevel int
var ConsoleSaveLevel int
var OPCWSReconnect bool
var OPCWSDebug bool
var FSAlert bool
var DisplayFS0602 bool

func init() {
	configFile := flag.String("c", "", "配置文件目录")
	flag.Parse()

	addr := tools.GetMacAddr()
	if len(addr) == 0 {
		fmt.Println("当前设备未找到网络适配器")
		tools.Pause()
		os.Exit(1)
	}
	// todo 打包时绑定指定的设备地址
	//if tools.Md5(addr[0]) != "7042b4fe3f65ca1d737b1ada3367f2de" {
	//	fmt.Println("软件未激活, 请联系管理员, 当前设备ID为", tools.Md5(addr[0]))
	//	_ = tools.WriteStringToLog("equip_id: "+tools.Md5(addr[0]), "run_error.log", "")
	//	tools.Pause()
	//	os.Exit(1)
	//}

	if *configFile == "" {
		fmt.Println("使用默认配置文件 ./config.ini")
		*configFile = "./config.ini"
	}
	config, err := ini.Load(*configFile)
	if err != nil {
		fmt.Println("加载配置文件失败: ", err)
		os.Exit(1)
	}
	AppConfig = config
	ReLoadConfig(false)
}

func ReLoadConfig(reload bool) {
	if reload == true {
		err := AppConfig.Reload()
		if err != nil {
			fmt.Println("AppConfig.Reload() error: ", err)
			return
		}
	}
	// http 服务静态文件根目录
	StaticPath = AppConfig.Section("").Key("static_path").String()
	// 客户端程序根目录, 工程导出基础目录, 将工程json文件输出到该目录后打包成 zip 文件导出
	ClientAppPath = AppConfig.Section("").Key("client_app_dir").String()
	// 自定义日志是否打印输出
	ConsoleOutput, _ = AppConfig.Section("").Key("console_output").Bool()
	// 自定义日志是否保存到文件
	ConsoleSave, _ = AppConfig.Section("").Key("console_save").Bool()
	// 自定义日志打印输出级别, 条件 >=
	ConsoleOutputLevel, _ = AppConfig.Section("").Key("console_output_level").Int()
	// 自定义日志保存级别, 条件 >=
	ConsoleSaveLevel, _ = AppConfig.Section("").Key("console_save_level").Int()
	// OPC Websocket 客户端是否自动重连
	OPCWSReconnect, _ = AppConfig.Section("opc_websocket_client").Key("reconnect").Bool()
	// 是否开启 OPC 调试, 开启后打印所有recv信息
	OPCWSDebug, _ = AppConfig.Section("opc_websocket_client").Key("debug").Bool()
	// 是否启用自研设备报警
	FSAlert, _ = AppConfig.Section("fs").Key("alert").Bool()
	// 是否显示自研设备运行同步数据
	DisplayFS0602, _ = AppConfig.Section("display").Key("fs0602").Bool()

}
